# wenyan_plus/modules/rhythm/core.py
"""
文言文韵律分析核心模块
- 平仄分析 • 音韵流转
- 押韵检测 • 声律相和  
- 格律验证 • 法度严谨
- 韵律评分 • 意境衡量
"""

class 韵律引擎:
    """古汉语韵律分析引擎"""
    
    def __init__(self):
        self.平水韵部 = self.载入韵书()
        self.格律模板 = self.载入格律()
        print("🎵 韵律引擎初始化完成 • 声律启鸣")
    
    def 载入韵书(self) -> dict:
        """载入平水韵部数据"""
        return {
            "东": ["东", "同", "童", "僮", "铜", "桐", "峒", "筒", "瞳", "中"],
            "冬": ["冬", "农", "宗", "钟", "龙", "春", "松", "冲", "容", "蓉"],
            "江": ["江", "缸", "窗", "邦", "降", "双", "泷", "庞", "撞", "豇"],
            # ... 更多韵部
        }
    
    def 平仄分析(self, 诗文: str) -> list:
        """分析每个字的平仄"""
        平仄结果 = []
        for 字 in 诗文:
            平仄 = self.判平仄(字)
            平仄结果.append((字, 平仄))
        return 平仄结果
    
    def 判平仄(self, 字: str) -> str:
        """判断单字平仄（简化版）"""
        平声字 = ["东", "同", "童", "铜", "中", "农", "宗", "钟", "容", "江"]
        仄声字 = ["董", "动", "孔", "总", "汞", "肿", "种", "宠", "冗", "讲"]
        
        if 字 in 平声字:
            return "平"
        elif 字 in 仄声字:
            return "仄"
        else:
            return "中"  # 中性或未知
    
    def 押韵检测(self, 诗句列表: list) -> dict:
        """检测诗歌押韵情况"""
        if not 诗句列表:
            return {"押韵": False, "韵脚": []}
        
        末字列表 = [诗句[-1] for 诗句 in 诗句列表 if 诗句]
        韵部结果 = []
        
        for 字 in 末字列表:
            韵部 = self.查韵部(字)
            韵部结果.append(韵部)
        
        是否押韵 = len(set(韵部结果)) == 1 if 韵部结果 else False
        
        return {
            "押韵": 是否押韵,
            "韵脚": 末字列表,
            "韵部": 韵部结果,
            "统一韵部": 韵部结果[0] if 是否押韵 else None
        }
    
    def 查韵部(self, 字: str) -> str:
        """查询字所属韵部"""
        for 韵部, 字列表 in self.平水韵部.items():
            if 字 in 字列表:
                return 韵部
        return "未知"
    
    def 格律验证(self, 诗文: str, 格律类型: str = "七律") -> dict:
        """验证诗歌格律"""
        # 简化的格律验证
        平仄序列 = self.平仄分析(诗文)
        平仄字符串 = "".join([平仄 for 字, 平仄 in 平仄序列])
        
        return {
            "格律类型": 格律类型,
            "平仄序列": 平仄序列,
            "符合格律": len(诗文) == 8 if 格律类型 == "七律" else True,
            "平仄分布": self.统计平仄(平仄序列)
        }
    
    def 统计平仄(self, 平仄序列: list) -> dict:
        """统计平仄比例"""
        平数 = sum(1 for 字, 平仄 in 平仄序列 if 平仄 == "平")
        仄数 = sum(1 for 字, 平仄 in 平仄序列 if 平仄 == "仄")
        总数 = len(平仄序列)
        
        return {
            "平声": 平数,
            "仄声": 仄数,
            "平仄比": f"{平数}/{仄数}",
            "平声比例": f"{(平数/总数)*100:.1f}%",
            "仄声比例": f"{(仄数/总数)*100:.1f}%"
        }

# 示例用法
if __name__ == "__main__":
    引擎 = 韵律引擎()
    
    # 测试诗句
    测试诗句 = "床前明月光，疑是地上霜"
    
    print("📜 韵律分析演示:")
    print(f"诗句: {测试诗句}")
    
    # 平仄分析
    平仄结果 = 引擎.平仄分析(测试诗句)
    print("平仄分析:", "".join([平仄 for 字, 平仄 in 平仄结果]))
    
    # 押韵检测
    押韵结果 = 引擎.押韵检测([测试诗句])
    print("押韵检测:", 押韵结果)
    
    # 格律验证
    格律结果 = 引擎.格律验证(测试诗句, "五绝")
    print("格律验证:", 格律结果["平仄分布"])